www.gusucode.com > 超声波测量以及形成图像 对相关信号进行模拟仿真 > 超声波测量以及形成图像 对相关信号进行模拟仿真/digital holograpy/prog/splice.m

    function [ c,rc,centerc ] = splice( a,b,ra,rb,centera,centerb,dxy,fwsv )
%SPLICE Summary of this function goes here
%  Detailed explanation goes here
MNa=size(a);
MNb=size(b);
[vax,vay]=opticimage(MNa,dxy(1),dxy(2),centera);
[vbx,vby]=opticimage(MNb,dxy(1),dxy(2),centerb);
vax=min(vax);
vay=max(vay);
vbx=min(vbx);
vby=max(vby);
shift=[0,round((vay-vby)./dxy(2));0,round((vbx-vax)./dxy(1))];

s1=min(shift(1,:));
s2=min(shift(2,:));
shift(1,:)=shift(1,:)-s1;
shift(2,:)=shift(2,:)-s2;

vax=vax+s2.*dxy(1);
vay=vay-s1.*dxy(2);

ma=[1,MNa(1)]+shift(1,1);
mb=[1,MNb(1)]+shift(1,2);
na=[1,MNa(2)]+shift(2,1);
nb=[1,MNb(2)]+shift(2,2);

M=max([ma,mb]);
N=max([na,nb]);

a1=zeros(M,N).*NaN;
b1=a1;
ra1=logical(zeros(M,N));
rb1=ra1;
a1(ma(1):ma(2),na(1):na(2))=a;
b1(mb(1):mb(2),nb(1):nb(2))=b;
ra1(ma(1):ma(2),na(1):na(2))=ra;
rb1(mb(1):mb(2),nb(1):nb(2))=rb;
clear a b ra rb

wa=ra1;
wb=rb1;
for n=1:length(fwsv)
    wa=conv2(wa,ones(fwsv(n)),'same')./(fwsv(n).^2);
    wb=conv2(wb,ones(fwsv(n)),'same')./(fwsv(n).^2);
end
common=ra1&rb1;
wa=zero2one(wa).*common;
wb=zero2one(wb).*common;

diff=(a1-b1);
diff=nanmean(diff(common));
b1=b1+diff;

cav=(a1.*wa+b1.*wb)./(wa+wb);
cav(~common)=0;

a1(~ra1|common)=0;
b1(~rb1|common)=0;

c=a1+b1+cav;
rc=ra1|rb1;
c(~rc)=NaN;
centerc=[vax,vay]+floor([N,M]./2).*[1,-1].*dxy;